angular.module('eYe')
	.controller('RechercheController', function($scope,$routeParams,$location,DataBase,safeApply,Connexion) {

		var tabDifficulte = [];
		var tabNiveau = [];
		var index = "";
			
		var tabQcm = {};

		$.when(
			DataBase.BD_Themes_Qcms.Qcms.toArray(),
			DataBase.BD_Themes_Qcms.Niveaux.toArray(),
			DataBase.BD_Themes_Qcms.Difficultes.toArray()
		).then(function(qcms,niveaux,difficultes){

			tabNiveau = niveaux;
			tabDifficulte = difficultes;
			
			qcms.forEach(function(qcm){
				tabQcm[qcm.id] = qcm;
			});

			$.each(tabQcm, function(index, value){
				tabQcm[index]['description_court'] = truncateString(tabQcm[index].description, 130);
			});

			$scope.qcm = tabQcm;

			var tabParametresRecherche = new Array();
			tabParametresRecherche.option_titre =true;
			tabParametresRecherche.option_description = true;
			tabParametresRecherche.option_auteur = false;
			tabParametresRecherche.difficulte = 0;
			tabParametresRecherche.niveau = 0;

			$('#input_recherche').val('');
			$("#option_titre").attr("checked", "checked");
			$("#option_description").attr("checked", "checked");
			$("#option_auteur").removeAttr("checked");

			index = creationIndex(tabParametresRecherche);

			tabDifficulte.unshift({id:-1,intitule:'-- Difficulté -- '});
			$scope.listeDifficulte = tabDifficulte;
			tabNiveau.unshift({id:-1,intitule:'-- Niveau -- '});	
			$scope.listeNiveau = tabNiveau;
			
			$scope.difficulteRecherche = $scope.listeDifficulte[0];					
			$scope.niveauRecherche = $scope.listeNiveau[0];

			safeApply($scope); 
			Connexion.cacherCacheConnexion();
		});
		

		function creationIndex(tabParametresRecherche){
			
			var index = lunr(function(){
				if(tabParametresRecherche.option_titre){
					this.field('titre');
				}

				if(tabParametresRecherche.option_description){
					this.field('description');
				}

				if(tabParametresRecherche.option_auteur){
					this.field('auteur');
				}

				if(tabParametresRecherche.difficulte){
					this.field('difficulte');
				}

				if(tabParametresRecherche.niveau){
					this.field('niveau');
				}
							
				this.ref('id');
			});


			var tempQCM = new Array();
			$.each(tabQcm,function(index1,valeur1){
				var qcm = new Array();
				$.each(valeur1,function(index2,valeur2){
					if( typeof valeur2 === 'string') {
						qcm[index2] = cleanstring(valeur2,1);
					}
					else if(typeof valeur2 === 'number'){
						qcm[index2] = valeur2;
					}
				});
				tempQCM.push(qcm);
			});
		
			$.each(tempQCM,function(i,valeur){								
				index.add(valeur);
			});
				
			return index;
		};

		$scope.choixOptionsRecherche = function(){

			var tabParametresRecherche = new Array();
			var text_recherche = $('#input_recherche').val();
			
			tabParametresRecherche.option_titre = $("#option_titre")[0].checked;
			tabParametresRecherche.option_description = $("#option_description")[0].checked;
			tabParametresRecherche.option_auteur = $("#option_auteur")[0].checked;

			var difficulte = $scope.difficulteRecherche;	
			var niveau = $scope.niveauRecherche;				
		
			tabParametresRecherche.difficulte = 0;
			if(difficulte.id != -1 && text_recherche.length == 0){
				tabParametresRecherche.difficulte =  1;
			}

			tabParametresRecherche.niveau = 0;
			if(niveau.id != -1 && text_recherche.length == 0){
				tabParametresRecherche.niveau =  1;
			}

			index = creationIndex(tabParametresRecherche);
					
			$scope.rechercher();
			
		}

		$scope.rechercher = function() {		

			var text_recherche = $('#input_recherche').val();	
			
			var difficulte = $scope.difficulteRecherche;	
			var niveau = $scope.niveauRecherche;

			if(difficulte.id == -1 && niveau.id == -1 && text_recherche.length == 0){
				$('#aucunResultat').hide();
				$scope.qcm = tabQcm;
				return false;	
			}

			if(difficulte.id != -1){
				text_recherche = text_recherche + ' ' + $scope.difficulteRecherche.intitule;
			}

			if(niveau.id != -1){
				text_recherche = text_recherche + ' ' + $scope.niveauRecherche.intitule;
			}
			
			var resultats = index.search(cleanstring(text_recherche,0));
								
			var id;
			var tabRes = [];
			var nbResultat = 0;
			
			for(var i=0;i<resultats.length;i++){
				id = resultats[i].ref;
				if(typeof tabQcm[id] !=='undefined'){

					var verif = false;

					if(difficulte.id != -1 || niveau.id != -1){																
						if( (difficulte.id == -1 || (difficulte.id != -1 && tabQcm[id].difficulte == $scope.difficulteRecherche.intitule))
							&& (niveau.id == -1 || (niveau.id != -1 && tabQcm[id].niveau == $scope.niveauRecherche.intitule)) ){
							tabRes.push(tabQcm[id]);
							verif = true;
						}
					}
					else{								
						tabRes.push(tabQcm[id]);
						verif = true;
					}

					if(verif){
						nbResultat++;	
					}
				}
			}

			$.each(tabRes, function(index, value){
				tabRes[index]['description_court'] = truncateString(tabRes[index].description, 130);
			});
						
			$scope.qcm = tabRes;

			if(nbResultat > 0){
				$("#aucunResultat").hide();	
			}
			else{
				$("#aucunResultat").show();
			}

			$scope.themes = new Array();	
			
			$('#resultats_recherche').show();			
		};

		$scope.afficherQcm = function(id) {
			$location.path('/qcm/'+id);
		}
	});